
 // 注册用户的处理函数
const db = require('../db/index')
// 加密处理 
const bcrypt = require('bcryptjs')
const jwt = require('jsonwebtoken')
const config = require('../config')

exports.regUser = (req, res) => {

    // 获取客户提交到服务器端的数据
    const userinfo = req.body
    // 检验数据, 配置了对应的中间件，所以不需要
    // if (!userinfo.name || !userinfo.password) {
    //     return res.send({ status: 1, message: '用户名或密码不合法！' })
    // }

    const sql = 'select * from ev_users where name=?'
    db.query(sql, userinfo.name, function (err, results) {
        // 执行 SQL 语句失败
        if (err) {
            // return res.send({ status: 1, message: err.message })
            return res.cc(err)
        }
        // 用户名被占用
        if (results.length > 0) {
            // return res.send({ status: 1, message: '用户名被占用，请更换其他用户名！' })
            return res.cc('用户名被占用，请更换其他用户名！')
        }
        // TODO: 用户名可用，继续后续流程...
        //  加密密码
        userinfo.password = bcrypt.hashSync(userinfo.password, 10)
        // 插入操作
        const sqlInsert = 'insert into ev_users set ?'
        db.query(sqlInsert, { name: userinfo.name, password: userinfo.password }, (err, result) => {
            if (err) {
                return res.cc(err)
            }
            // 判断影响行数
            if (result.affectedRows !== 1) {
                return res.cc('用户名被占用，请更换其他用户名！')
            }
            return res.cc('注册成功', 0)
        })
    })

    // res.send('注册成功')
}

// 登录的处理函数

exports.login = (req, res) => {
    const userinfo = req.body
    const sql = 'select * from ev_users where name =?'
    db.query(sql, userinfo.name, (err, result)=>{
        // console.log(result);
        if(err){
          return  res.cc(err)
        }
        if(result.length != 1){
        return  res.cc('密码错误，请检查密码')
        }
        // 判断密码是否正确,：调用 bcrypt.compareSync(用户提交的密码, 数据库中的密码) 方法比较密码是
        // 否一致返回值是布尔值（true 一致、false 不一致）
        const compareResult = bcrypt.compareSync(userinfo.password, result[0].password)
        if (!compareResult) {
            return res.cc('登录失败,密码错误')
            }
        const user = { ...result[0], password: '', uesr_pic: '' }
        // 加密token
        const tokenStr = jwt.sign(user, config.jwtSecretKey, {expiresIn: '48h'})
        res.send({
            status: 0,
            message: '登陆成功',
            // 为了方便客户端使用 Token，在服务器端直接拼接上 Bearer 的前缀
            token:  'Bearer '+tokenStr
        })
    })
    // res.send('登录成功')
}